博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC 知识总结
阅读量:5142 次
发布时间:2019-06-13

本文共 6096 字,大约阅读时间需要 20 分钟。

参考文章:

 

                 孔浩视频

 

1. 几个关键类:

    RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter 替代 DefaultAnnoationHandlerMapping 和 AnnotationMethodHandlerAdapter

    DispatcherServlet , InternalResourceViewResolver

2. 默认配置文件名称:

    *-servlet.xml

3. 可以使用<init-param>元素,手动指定配置文件的路径;

4. 基本配置

5. 传入参数的方式:

    1). (@RequestParam("username") String username) // @RequestParam("username")中的参数会被认为是地址的一部分,如果不传此值,会报错

    2). (String username) 

    3). (User user) // 页面以spring的form表单提交 

    4). (@ModelAttribute("user")User user) // 等于将user放到model中,可以处理页面跳转到添加页面时,无值可取的错误 

    5). @RequestMapping(value = "/{uniqueId:^\\d+$}",method = RequestMethod.GET)

         public ModelAndView edit(@PathVariable("uniqueId") String uniqueId,        

         @RequestMapping(value="/{username}/update",method=RequestMethod.GET)

         (@PathVariable String username,Model model) {

 

    6). public String testParam(HttpServletRequest request, HttpServletResponse response, HttpSession session)

        可以传入HttpServletRequest、HttpServletResponse、HttpSession,值得注意的是,如果第一次访问页面,HttpSession没被创建,可能会出错;

    将值传递给页面:

    1). 参数中加map(Map<String,Obect)),map中添加要传递给页面的参数。取值方式:${key}

    2). Model model ,model.addAttribute("username",username)

    3). public String testParam(PrintWriter out, @RequestParam("username") String username) { //out直接输出

6. Controller中方法的返回值:

    void:多数用于使用PrintWriter输出响应数据;

    String 类型:返回该String对应的View Name;

    任意类型对象:

    返回ModelAndView:

7. 拦截器:

    preHandle:拦截器的前端,执行控制器之前所要处理的方法,通常用于权限控制、日志,其中,Object o表示下一个拦截器;

    postHandle:控制器的方法已经执行完毕,转换成视图之前的处理;

    afterCompletion:视图已处理完后执行的方法,通常用于释放资源;

    在MVC的配置文件中,配置拦截器与需要拦截的URL:

8. Spring标签:

    <%@taglib uri="http://www.springframework.org/tags" prefix="spring" %>,使用<spring:message code="key" />调用

    Spring form标签:<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>,使用方式如下:   

Username:
Password:
Attach:

9. 国际化:

    在MVC配置文件中,配置国际化属性文件:   

     那么,Spring就会在项目中搜索相关的国际化属性文件,如:message.properties、message_zh_CN.properties

10. 自定义视图(JstlView,ExcelView)

      启用jstl支持, 在InternalResourceViewResolver中加入,貌似新版可以不加,默认启用:      

11. 异常:

       局部异常处理,举例如下:       

@ExceptionHandler(value={UserException.class})             public String handlerException(UserException e,HttpServletRequest req) {                          req.setAttribute("e",e);                          return "error";              }

       全局异常处理:

error

       页面获取异常:

发现错误:

${exception.message}

12. 返回json数据:

     需要jackson的jar包,url以params="json"中的json结尾: 

@RequestMapping(value="/{username}",method=RequestMethod.GET,params="json")   @ResponseBody  public User show(@PathVariable String username) {
return users.get(username); }

13. 静态资源处理:

      方法一:

      方法二: 

                  <mvc:default-servlet-handler>:当在web.xml 中DispatcherServlet使用<url-pattern>/</url-pattern> 映射时,能映射静态资源(当Spring Web MVC框架

                  没有处理请求对应的控制器时(如一些静态资源),转交给默认的Servlet来响应静态文件,否则报404找不到资源错误,)

14. 验证:

@Validated User user,BindingResult br ;两个必须放在一起,将验证结果放到br中            public String add(@Validated User user,BindingResult br,@RequestParam("attachs")MultipartFile[] attachs,HttpServletRequest req) throws IOException {                        if(br.hasErrors()) {                                                    //如果有错误直接跳转到add视图                                                    return "user/add";                        }           }           页面显示错误信息的代码: 

15 返回页面的两种方式:

       return "user/show";

       return "redirect:/user/users";

16. map集合取值

    (map.put("users",users),users为也是个map):    

${um.value.username } ----
${um.value.nickname } ----${um.value.password } ----${um.value.email }--
修改
删除

 17.  字符编码处理:    

CharacterFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterFilter
/*

 19. 文件上传

      页面要求:POST请求;enctype="multipart/form-data":      

只上传一个文件:      jsp页面:      类:@RequestParam("attachs")MultipartFile attach      上传多个文件:       jsp页面:Attach:
类: //在具体添加用户时,是post请求,就访问以下代码 @RequestMapping(value="/add",method=RequestMethod.POST) //一定要紧跟Validate之后写验证结果类 public String add(@Validated User user,BindingResult br,@RequestParam("attachs")MultipartFile[] attachs,HttpServletRequest req) throws IOException { if(br.hasErrors()) { //如果有错误直接跳转到add视图 return "user/add"; } String realpath = req.getSession().getServletContext().getRealPath("/resources/upload"); System.out.println(realpath); for(MultipartFile attach:attachs) { if(attach.isEmpty()) continue; File f = new File(realpath+"/"+attach.getOriginalFilename()); FileUtils.copyInputStreamToFile(attach.getInputStream(),f); } users.put(user.getUsername(), user); return "redirect:/user/users"; } @RequestParam("attachs")MultipartFile[] attachs 数组的时候不会自动赋值,不可以使用MultipartFile[] attachs

 

20. 返回json数据

      需要jackson的jar包,url以params="json"中的json结尾:      

@RequestMapping(value="/{username}",method=RequestMethod.GET,params="json")      @ResponseBody      public User show(@PathVariable String username) {            return users.get(username);      }

 

转载于:https://www.cnblogs.com/Jtianlin/p/4524624.html

你可能感兴趣的文章
Jmeter深度学习第一天——简单请求、带header请求、返回值乱码问题
查看>>
error C2662 无法将左值绑定到右值 —— 变量永远是左值,即使它的类型为右值引用...
查看>>
C#, CLR, and .NET Framework versions
查看>>
python初识面向对象(一)
查看>>
k8s(6)-滚动更新
查看>>
特殊权限SUID
查看>>
C#获取IP地址
查看>>
Linux:PS命令详解与使用
查看>>
PHP设计模式:值对象模式
查看>>
解决python中csv文件中文写入问题
查看>>
TensorFlow学习资源
查看>>
Openstack(十一)部署网络服务neutron(控制节点)
查看>>
Git命令大全
查看>>
Titanium Studio
查看>>
fullcalendar解决同一时间段存在多个日程
查看>>
华为研发工程师编程题
查看>>
小白大收集:C# 连库字符串详细讲解
查看>>
tls数据包分析
查看>>
luogu1328 [NOIp2014]生活大爆炸版石头剪刀布 (模拟)
查看>>
BZOJ 1003: [ZJOI2006]物流运输trans(最短路+dp)
查看>>